#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

// int main()
// {
//     pid_t id = fork();
//     if(id < 0)
//     {
//         perror("fork");
//         return 1;
//     }
//     else if(id == 0)
//     {
//         //子进程
//         while(1)
//         {
//             sleep(1);
//             printf("I am a child process, my pid: %d\n", getpid());
//             printf("\n");
//         }
//     }
//     else
//     {
//         //父进程
//         while(1)
//         {
//             sleep(1);
//             printf("I am a fathermak process, my pid: %d\n", getpid());
//         }
//     }
//     return 0;
// }

// int main()
// {
//     for(int i = 0; i <= 150; ++i)
//     {
//         printf("%d->%s\n", i, strerror(i));
//     }
//     return 0;
// }

// int main()
// {
//     pid_t id = fork();
//     //子进程
//     if(id == 0)
//     {
//         while(1)
//         {
//             printf("child process, pid: %d, ppid: %d\n", getpid(), getppid());
//             sleep(1);
//         }
//         exit(0);
//     }
//     //父进程
//     while(1)
//     {
//         int status = 0;
//         pid_t rid = waitpid(id, &status, WNOHANG);
//         if(rid == id)
//         {
//             printf("Wait success , pid : %d, exit code: %d, exit signal: %d\n",getpid(), status >> 8, status & 0x7f);
//             break;
//         }
//         else if(rid == 0)
//         {
//             printf("waitpid ended, but child process is still alive\n");
//             printf("-----------------------------------------------\n");
//             printf("\n");
//             sleep(1);
//         }
//     }
//     return 0;
// }

// int main()
// {
//     pid_t id = fork();
//     if(id == 0)
//     {
//         printf("child process, pid: %d\n", getpid());
//         printf("\n");
//         exit(0);
//     }
//     printf("father process, pid: %d\n", getpid());
//     return 0;
// }

// int main()
// {
//     printf("hello wolrd!");
//     _exit(-1);
//     //return 0;
// }

int main()
{
    //execl("/usr/bin/ls", "ls", "-a", "-l", NULL);

    //execlp("ls", "ls", "-a", "-l", NULL);

    char* argv[] = {"ls", "-a", "-l", NULL};
    execv("/usr/bin/ls", argv);
    return 0;
}